#ifndef SONGREQUESTWIDGET_H
#define SONGREQUESTWIDGET_H

/**
Nectarine Utility Project is a software interface for the web system 'demovibes'
Copyright (C) 2010  Alexandre LAURENT

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

website: http://code.google.com/p/nectarine-utility-project/
e-mail: lw.demoscene@gmail.com
**/

#include <QWidget>
#include <QList>
#include <QPair>

#include "../Types/songrequest.h"

class QGroupBox;
class QVBoxLayout;
class QHBoxLayout;
class QLabel;
class QSlider;
class QTimer;

class QResizeEvent;

class VoteWidget;

class SongRequestWidget : public QWidget
{
    Q_OBJECT

private:

    unsigned int idSong;

    QGroupBox* pMainGroupBox;
    QVBoxLayout* pMainVGrid;

    QLabel* pTitleLabel;
    QList<QHBoxLayout*> pListPHArtistGrid;
    QList<QPair<QLabel*,QLabel*> > pListArtist; // Handle for an icon and a text

    QHBoxLayout* pRequesterHGrid;
    QLabel* pRequesterTitle;
    QLabel* pFlagRequesterLabel; // Handle for an icon
    QLabel* pRequesterLabel;

    VoteWidget* pVoteWidget;

    QHBoxLayout* pProgressionHGrid;
    QLabel* pTimeLeftLabel;
    QLabel* pSongLengthLabel;

    QSlider* pProgressionSlider;

    QTimer* pCountDownTimer;

    SongRequest data;

    bool isConnected;

    void clearGrid(void);
    void updateInterface(void);
    void resizeEvent ( QResizeEvent * event );

protected slots:

    void updateCountDown();

public:
    SongRequestWidget(QWidget* parent=0);
    ~SongRequestWidget(void);

    void setData(const SongRequest& songRequestData);

    void setConnected(const bool isConnected);

    QSize sizeHint(void);
    QSize minimumSizeHint()const;

    unsigned int getSongId(void)const { return idSong; }
    VoteWidget* getVoteWidget(void) { return pVoteWidget; }
};

#endif // SONGREQUESTWIDGET_H
